home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / linkage.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.0 KB  |  97 lines

  1. #ifndef _LINUX_LINKAGE_H
  2. #define _LINUX_LINKAGE_H
  3.  
  4. #include <linux/compiler.h>
  5. #include <asm/linkage.h>
  6.  
  7. #ifdef __cplusplus
  8. #define CPP_ASMLINKAGE extern "C"
  9. #else
  10. #define CPP_ASMLINKAGE
  11. #endif
  12.  
  13. #ifndef asmlinkage
  14. #define asmlinkage CPP_ASMLINKAGE
  15. #endif
  16.  
  17. #ifndef asmregparm
  18. # define asmregparm
  19. #endif
  20.  
  21. #define __page_aligned_data    __section(.data.page_aligned) __aligned(PAGE_SIZE)
  22. #define __page_aligned_bss    __section(.bss.page_aligned) __aligned(PAGE_SIZE)
  23.  
  24. /*
  25.  * This is used by architectures to keep arguments on the stack
  26.  * untouched by the compiler by keeping them live until the end.
  27.  * The argument stack may be owned by the assembly-language
  28.  * caller, not the callee, and gcc doesn't always understand
  29.  * that.
  30.  *
  31.  * We have the return value, and a maximum of six arguments.
  32.  *
  33.  * This should always be followed by a "return ret" for the
  34.  * protection to work (ie no more work that the compiler might
  35.  * end up needing stack temporaries for).
  36.  */
  37. /* Assembly files may be compiled with -traditional .. */
  38. #ifndef __ASSEMBLY__
  39. #ifndef asmlinkage_protect
  40. # define asmlinkage_protect(n, ret, args...)    do { } while (0)
  41. #endif
  42. #endif
  43.  
  44. #ifndef __ALIGN
  45. #define __ALIGN        .align 4,0x90
  46. #define __ALIGN_STR    ".align 4,0x90"
  47. #endif
  48.  
  49. #ifdef __ASSEMBLY__
  50.  
  51. #define ALIGN __ALIGN
  52. #define ALIGN_STR __ALIGN_STR
  53.  
  54. #ifndef ENTRY
  55. #define ENTRY(name) \
  56.   .globl name; \
  57.   ALIGN; \
  58.   name:
  59. #endif
  60.  
  61. #ifndef WEAK
  62. #define WEAK(name)       \
  63.     .weak name;       \
  64.     name:
  65. #endif
  66.  
  67. #define KPROBE_ENTRY(name) \
  68.   .pushsection .kprobes.text, "ax"; \
  69.   ENTRY(name)
  70.  
  71. #define KPROBE_END(name) \
  72.   END(name);         \
  73.   .popsection
  74.  
  75. #ifndef END
  76. #define END(name) \
  77.   .size name, .-name
  78. #endif
  79.  
  80. /* If symbol 'name' is treated as a subroutine (gets called, and returns)
  81.  * then please use ENDPROC to mark 'name' as STT_FUNC for the benefit of
  82.  * static analysis tools such as stack depth analyzer.
  83.  */
  84. #ifndef ENDPROC
  85. #define ENDPROC(name) \
  86.   .type name, @function; \
  87.   END(name)
  88. #endif
  89.  
  90. #endif
  91.  
  92. #define NORET_TYPE    /**/
  93. #define ATTRIB_NORET  __attribute__((noreturn))
  94. #define NORET_AND     noreturn,
  95.  
  96. #endif
  97.